package com.hskn.hss.module.empPlan.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hskn.hss.core.domain.BaseEntity;
import com.hskn.hss.entity.TreeEntity;
import com.hskn.hss.exception.ExcelReaderDataException;
import com.hskn.hss.module.carPlan.vo.WorkGroupByCarPlanVo;
import com.hskn.hss.module.common.to.ExcelReaderTO;
import com.hskn.hss.module.empPlan.entity.EmpPlan;
import com.hskn.hss.module.empPlan.to.AttendanceCountTo;
import com.hskn.hss.module.empPlan.to.EmpPlanSummaryTableTO;
import com.hskn.hss.module.empPlan.to.EmpPlanTo;
import com.hskn.hss.module.empPlan.to.SelectEmpPlanTableTO;
import com.hskn.hss.module.empPlan.vo.*;
import com.hskn.hss.module.rptEmployeeWork.entity.RptEmployeeWork;
import com.hskn.hss.module.workkaoqin.entity.WorkKaoqin;
import com.hskn.hss.utils.page.PageVo;
import org.springframework.transaction.annotation.Transactional;

import java.io.IOException;
import java.text.ParseException;
import java.util.List;
import java.util.Map;


/**
 * <p>
 * 服务类
 * </p>
 *
 * @author hskn
 * @since 2021-05-11
 */
public interface EmpPlanService extends IService<EmpPlan> {

    EmpPlanMessageVo create(EmpPlanTo empPlanTo) throws ParseException;

    EmpPlanPageVo masterList(BaseEntity entity, EmpPlanTo empPlanTo);

    EmpPlanPageVo detailList(BaseEntity entity, EmpPlanTo empPlanTo) throws ParseException;

    EmpPlanMessageVo update(EmpPlanTo empPlanTo) throws ParseException;

    EmpPlanMessageVo deleteMaster(EmpPlanTo empPlanTo) throws ParseException;

    EmpPlanMessageVo deleteDetail(EmpPlanTo empPlanTo) throws ParseException;

    WorkGroupByCarPlanVo deleteWorkGroup(EmpPlanTo empPlanTo);

    WorkGroupByCarPlanVo deleteWorkRule(EmpPlanTo empPlanTo);

    EmpPlanMessageVo updateByDay(EmpPlanTo empPlanTo) throws ParseException;

    EmpPlanReadOneVo read(EmpPlanTo empPlanTo) throws ParseException;

    List<EmpPlanSummaryTableVO> selectSummaryTable(EmpPlanSummaryTableTO empPlanSummaryTableTO) throws ParseException;

    List<EmpPlanSummaryDetailTableVO> selectSummaryDetailTable(EmpPlanSummaryTableTO empPlanSummaryTableTO);

    List<EmpPlanForExcelVO> selectEmpPlanForExcel(List<EmpPlan> empPlanList);
    @Transactional(
            rollbackFor = {Exception.class}
    )
    Boolean excelReader(ExcelReaderTO excelReaderTO) throws ExcelReaderDataException;

    List<EmpPlan> selectList(SelectEmpPlanTableTO selectEmpPlanTableTO);

    List<ActualOperationListVo> selectWorkKaoqinList(SelectEmpPlanTableTO selectEmpPlanTableTO, List<RptEmployeeWork> empPlanList);

    List<EmployeeConfigVo> employeeConfig();

    Map<String,EmpPlan> getEmpMap(QueryWrapper<EmpPlan> queryWrapper);

    List<EmpPlan> repeatPlanName(EmpPlanTo empPlanTo);

    List<TreeEntity> getEmployeeShiftStatus(EmpPlanTo empPlanTo);

    PageVo attendanceCount(BaseEntity entity, AttendanceCountTo attendanceCountTo);

    PageVo attendanceDetail(AttendanceCountTo attendanceCountTo);

    List attendanceCountChars(AttendanceCountTo attendanceCountTo);
}
